在先前的文章讀取 facebook 粉絲團 RSS
http://www.dotblogs.com.tw/chou/archive/2013/09/11/118178.aspx
發生了讀取出來的資料有亂碼的狀況,透過 HttpUtility.HtmlDecode 方法將經過 HTTP 傳輸而進行 HTML 編碼的字串轉換為解碼的字串。在處理過程中,我們是在 Model 將資料加入 Items 時對字串做處理。
除了這樣的方式外,我們也可以透過 Converter 做綁定值的轉換。
本文刊載於
http://www.dotblogs.com.tw/chou/archive/2013/09/12/118258.aspx
在這篇文章您可以學到:
透過 Converter 綁定值轉換。
練習前
請先下載先前文章讀取 facebook 粉絲團 RSS 的範例
開啟 MainViewModel.cs,將
Title = HttpUtility.HtmlDecode(item.Title.Text)
改回
Title = item.Title.Text
如下圖所示
新增 Converter
先新增類別
http://files.dotblogs.com.tw/chou/1309/Windows-Phone-Converter_F892/image_thumb_3.png
名稱改為 TilteConverter.cs。
新增後的畫面。
Converter 需要繼承並且實作 IValueConverter 介面,此介面提供將自訂邏輯套用至繫結的方法。
在這邊順便介紹一些小技巧,首先我們先讓 TitleConverter 繼承 IValueConverter,由於尚未引入 namespace 因此錯誤。
我們可以透過解析的功能,在 IValueConverter 按滑鼠右鍵,選擇 [解析],選擇 namespace。
自動加入 namespace 到程式碼中,接著在 IValueConvert 上按滑鼠右鍵,選擇 [實作介面],選擇 [實作介面]。
可以看到包含兩個方法 Convert 和 ConvertBack。
修改 Convert 內容,將傳入的 value 透過 HttpUtility.HtmlDecode 轉換。
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return HttpUtility.HtmlDecode(value.ToString());
}
將 class 改為 public。
將 Converter 加入應用程式資源 Application.Resources
開啟 App.xaml
將以下代碼加入 Application.Resources
<converter:TitleConverter xmlns:converter="clr-namespace:MvpRssPhoneApp" x:Key="TitleConverter" />
使用 Converter
開啟 MainPage.xaml 設計畫面,將顯示 Title 資訊的 TextBlock,Text 的部分,加上 Converter 進行綁定值轉換。
執行
我在 Converter 加入中斷點,當程式執行時,可以看到資料轉換的狀況。
執行結果。